/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.viajaconmigo.web.controladores;

import com.viajaconmigo.error.EmailUsuarioYaExisteException;
import com.viajaconmigo.error.NickUsuarioYaExisteException;
import com.viajaconmigo.model.Pais;
import com.viajaconmigo.service.UsuarioService;
import com.viajaconmigo.web.controladores.util.JSFUtil;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.enterprise.context.SessionScoped;
//import javax.faces.bean.ManagedBean;
//import javax.faces.bean.RequestScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.ServletContext;
import org.primefaces.event.CloseEvent;
import org.slf4j.LoggerFactory;

/**
 *
 * @author Pablo
 */
@Named("registroControl")
@SessionScoped
public class RegistroController extends ParentController implements Serializable {
    
    private final static org.slf4j.Logger logger = LoggerFactory.getLogger(RegistroController.class);

    private String nick;
    private String password;
    private String password_rep;
    private String nombre;
    private String email;
    private Date fechaNac;
    //private String ciudad;
    //private int provincia;
    private Integer nacion;
    private String sexo;
    //private List<SelectItem> provSelect;
    private List<SelectItem> paisSelect;
    private boolean showDialog;

    @Inject
    private UsuarioService usuario;

    /**
     * Creates a new instance of UsuarioController
     */
    public RegistroController() {
        showDialog = false;
        // carga();
    }
    /*
     public String getCiudad() {
     return ciudad;
     }

     public void setCiudad(String ciudad) {
     this.ciudad = ciudad;
     }
     */

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Date getFechaNac() {
        return fechaNac;
    }

    public void setFechaNac(Date fechaNac) {
        this.fechaNac = fechaNac;
    }

    public Integer getNacion() {
        return nacion;
    }

    public void setNacion(Integer nacion) {
        this.nacion = nacion;
    }

    public String getNick() {
        return nick;
    }

    public void setNick(String nick) {
        this.nick = nick;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public List<SelectItem> getPaisSelect() {
        return paisSelect;
    }

    public void setPaisSelect(List<SelectItem> paisSelect) {
        this.paisSelect = paisSelect;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPassword_rep() {
        return password_rep;
    }

    public void setPassword_rep(String password_rep) {
        this.password_rep = password_rep;
    }
    /*
     public List<SelectItem> getProvSelect() {
     return provSelect;
     }

     public void setProvSelect(List<SelectItem> provSelect) {
     this.provSelect = provSelect;
     }
    
     public int getProvincia() {
     return provincia;
     }

     public void setProvincia(int provincia) {
     this.provincia = provincia;
     }
     */

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public UsuarioService getUsuario() {
        return usuario;
    }

    public void setUsuario(UsuarioService usuario) {
        this.usuario = usuario;
    }

    public boolean isShowDialog() {
        return showDialog;
    }

    public void setShowDialog(boolean showDialog) {
        this.showDialog = showDialog;
    }

    public void doRegistro() {
        try {
            usuario.creaUsuario(nick, password, nombre, email,
                    fechaNac, nacion, sexo);
            showDialog = true;
        } catch (NickUsuarioYaExisteException e) {
            JSFUtil.createMessageError("form_registro:nick", "nickoccupied");
            logger.info("Error. El Nick del Usuario ya existe. {}",nick,e);
        } catch (EmailUsuarioYaExisteException e) {
            JSFUtil.createMessageError("form_registro:email", "emailoccupied");
            logger.info("Error. El Email del Usuario ya existe. {}",email,e);
        } catch (RuntimeException e) {
            JSFUtil.createMessageError("", "error_general");
            logger.error("Se he producido un error al crear el Usuario",e);
        }
    }

    public void handleClose(CloseEvent event) {
        try {
            showDialog = false;
            ExternalContext extContext = FacesContext.getCurrentInstance().getExternalContext();
            String ctxPath = ((ServletContext) extContext.getContext()).getContextPath();
            extContext.redirect(ctxPath + "/faces/index.xhtml");
        } catch (IOException ex) {            
            logger.error("Se he producido un error al intentar cerrar",ex);
        }
    }
   //@PostConstruct
 /*    public String goRegistro(){  
       
     provSelect = new ArrayList<SelectItem>();
     ArrayList <Provincias> provincias = usuario.getListaProvincias();
     for (int i=0; i<provincias.size(); i++){
     provSelect.add(new SelectItem(provincias.get(i).getIdProvincia(),
     provincias.get(i).getProvincia()));
     }        
       
        
     return "registro";
     }
     */

    public void carga() {
        try {
            paisSelect = new ArrayList<>();
            List<Pais> paises = datoAuxiliarService.getListaPaises();
            for (int i = 0; i < paises.size(); i++) {
                paisSelect.add(new SelectItem(paises.get(i).getIdPais(),
                        paises.get(i).getPais()));
            }
        }
        catch (RuntimeException e) {
            JSFUtil.createMessageError("", "error_general");
            logger.error("Se he producido un error al cargar la Lista de Paises",e);
        }
    }

    public String goIndex() {
        return "index";
    }
}
